package com.剑指offer.第三章;

public class 不含重复字符的最长子字符串 {

    /**
     * 这种是针对 只出现小写字母的字符串
     * 每当右指针移动一位时，就在该字符的数组中的位置+1
     * 每当左指针移动一位时，就在该字符的数组中的位置-1
     *
     * 移动的判断条件就是 数组中记录字符的次数是否大于1 如果是 就移动左指针 并且-1
     *
     * 如果出现重复的字符 就说明数组中的元素的次数之和是大于1的
     * @param s1
     * @return
     */
    public static int resolve(String s1) {
        if (s1.length() == 0) {
            return 0;
        }
        int[] ints = new int[26];
        int i = 0; // 右指针
        int j = 0; // 左指针
        int length = 1;
        for (; i < s1.length(); i++) {
            ints[s1.charAt(i) - 'a']++;
            while (isThan1(ints)) {
                ints[s1.charAt(j++) - 'a']--;
            }
            length = Math.max(i - j + 1, length);
        }
        return length;
    }

    public static boolean isThan1(int[] ints) {
        for (int anInt : ints) {
            if (anInt > 1) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        System.out.println(resolve("baacb"));
    }

}
